import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
/**
 * The test class StatistiekTest.
 *
 * @author  (your name)
 * @version (a version number or a date)
 */
public class StatistiekTest extends junit.framework.TestCase
{
    private Gebruiker user1;
    private Gebruiker user2;
    private Gebruiker user3;
    private Gebruiker user4;
    
    private Commentaar comment1;
    private Commentaar comment2;
    private Commentaar comment3;
    private Commentaar comment4;
    private Commentaar comment5;
    private Commentaar comment6;
    private Commentaar comment7;
    private Commentaar comment8;
    private Commentaar comment9;
    private Commentaar comment10;
    
    private Optreden optreden1;
    private Optreden optreden2;
    private Optreden optreden3;
    private Optreden optreden4;
    
    private Statistiek statistiek;
    /**
     * Default constructor for test class StatistiekTest
     */
    public StatistiekTest()
    {
    }

    /**
     * Sets up the test fixture.
     *
     * Called before every test case method.
     */
    protected void setUp()
    {
        statistiek = new Statistiek();
        
        Map<String, Integer> kings = new HashMap<String,Integer>();
        kings.put("closer", 237);kings.put("Birthday", 195);kings.put("Pyro",250);
        optreden1 = new Band("optreden1", "19:00", kings , "main stage");
        optreden2 = new Comedy("optreden2","Droog", "19:00", 50, "main stage");
        optreden3 = new Comedy("optreden3", "Mijn Zwarte Parade", "20:45", 40, "main stage");
        optreden4 = new FreePodium("optreden4", "20:28", "club");
//         //
//         optreden1.addAttendant();optreden1.addAttendant();optreden1.addAttendant();
//         optreden3.addAttendant();optreden3.addAttendant();
        Database.addOptreden(optreden1);Database.addOptreden(optreden2);Database.addOptreden(optreden3);
        Database.addOptreden(optreden4);
        
        user1 = new Gebruiker("user1", "dfefz");
        user2 = new Gebruiker("user2", "dsdfsdfz");
        user3 = new Gebruiker("user3",  "seffefz");
        user4 = new Gebruiker("user4", "dffdfz");
        
        user1.addOptreden(optreden1); user1.addOptreden(optreden2); user1.addOptreden(optreden3);
        user1.addOptreden(optreden4);
        user2.addOptreden(optreden2);user2.addOptreden(optreden4);
        user3.addOptreden(optreden2);user3.addOptreden(optreden4);
        user4.addOptreden(optreden1); user4.addOptreden(optreden2); user4.addOptreden(optreden3);
        
        Database.addUser(user1);Database.addUser(user2);Database.addUser(user3);Database.addUser(user4);
        
        //
        optreden2.like(user1);optreden2.like(user3);optreden2.like(user2);
        optreden1.like(user1);optreden1.like(user4);
        optreden4.like(user1);
        
        comment1 = new Commentaar(user1, optreden1, "comment1");
        comment2 = new Commentaar(user2, optreden2, "comment2");
        comment3 = new Commentaar(user1, optreden2, "comment3");
        comment4 = new Commentaar(user1, optreden3, "comment4");
        comment5 = new Commentaar(user4, optreden3, "comment5");
        comment6 = new Commentaar(user1, optreden3, "comment6");
        comment7 = new Commentaar(user1, optreden3, "comment7");
        comment8 = new Commentaar(user1, optreden4, "comment8");
        comment9 = new Commentaar(user1, optreden4, "comment9");
        comment10 = new Commentaar(user1, optreden4, "comment10");
        Database.addComment(comment1);Database.addComment(comment2);Database.addComment(comment3);
        Database.addComment(comment4);Database.addComment(comment5);Database.addComment(comment6);
        Database.addComment(comment7);Database.addComment(comment8);Database.addComment(comment9);
        Database.addComment(comment10);
    }

    /**
     * Tears down the test fixture.
     *
     * Called after every test case method.
     */
    protected void tearDown()
    {
        Database.clearDatabase();
    }
    
    /**
     * Test de methode getMostLiked()
     */
    public void testgetMostLiked()
    {
        Optreden[] mostLiked = statistiek.getMostLiked(3);
        assertEquals (optreden2, mostLiked[0]);
        assertEquals (optreden1, mostLiked[1]);
        assertEquals (optreden4, mostLiked[2]);
    }
    
    /**
     * Test de methode getMostAttended()
     */
    public void testgetMostAttended()
    {
        Optreden[] mostAttended = statistiek.getMostAttended(3);
        assertEquals (optreden2, mostAttended[0]);
        assertEquals (optreden4, mostAttended[1]);
        assertEquals (optreden1, mostAttended[2]);
//         //voor de methode waarbij de klasse Optreden een veld van het aantal bezoekers had
//         assertEquals (optreden1, mostAttended[0]);
//         assertEquals (optreden3, mostAttended[1]);
//         assertEquals (optreden2, mostAttended[2]);
    }
    
    /**
     * Test de methode getMostComments()
     */
    public void testgetMostComments()
    {
        Optreden[] mostComments = statistiek.getMostComments(3);
        assertEquals (optreden3, mostComments[0]);
        assertEquals (optreden4, mostComments[1]);
        assertEquals (optreden2, mostComments[2]);
    }
}
